# 1、输入数字n，输出n天前的日期（time或者datatime模块）
# 2、输出指定文件夹下有哪些文件或文件夹（实现ls命令， os）
# 3、列表去重，并且从小到大排序
# 4、如何在一个函数内部修改全局变量
# 5、如何跨模块共享全局变量
# 6、python的基本数据类型有哪些？
# 7、python中生成随机整数（1-10），随机小数（1-10），随机小数（0-1）的方法
# 8、python中哪些是可变数据类型，哪些是不可变数据类型
# 9、a+=1与a=a+1有什么区别
# 10、什么是pep8？说出5点它的标准
# 11、给定一个字符串，找出字符串第一个重复的字符
# 12、简述深拷贝与浅拷贝
# 13、简述python内存机制
# 14、使用python实现冒泡排序，快速排序
# 15、验证一个字符串是否属于回文（从左到右，从右到左都是一样）
# #################################################输出n天前的日期
# import datetime
# while True:
#     n = input("请输入天数n/q退出:")
#     if n == 'q':
#         break
#     n = int(n)
#     ntime = datetime.datetime.today() - datetime.timedelta(n)
#     ntime = ntime.strftime("%Y-%m-%d")
#     print(ntime)
# ################################################实现ls
# import subprocess
# dir = input("请输入要显示的文件夹目录：")
# x = subprocess.call(["ls","-a",dir])
# ################################################列表去重并排序，升序
# lst1 = [1,2,2,1,4,5,2,23,4,5,6,7,7,7,7,7,8]
# lst = list(set(lst1))
# print(lst)
# ##################################################函数内修改全局变量
# x = 1
# def func():
#     global x #函数内声明全局变量
#     x = 2
# func()
# print(x)
# ##################################################跨模块共享全局变量
# 模块1-----存放全局变量模块-----模块2
# ##################################################python基本数据类型
# 整形 浮点型 字符型 元组 列表 字典 布尔型
# ##################################################生成随机数
# import random
# print(random.randint(1,10))#1-10的随机整数
# print(random.uniform(1,10))#1-10的随机小数
# print(random.random())#0-1的随机小数
# ##################################################可变数据类型&不可变数据类型
# 可变数据类型：列表 集合 字典
# 不可变数据类型：整形 浮点型 字符型 元组
# ##################################################a+=1与a=a+1有什么区别
# # a=a+1会生成新变量，地址会改变

# a = 1
# print(a, id(a))
# a += 1
# print(a, id(a))
#
# x = 4
# print(x, id(x))
# x = x + 1
# print(x, id(x))
# # a+=1不一定会生成新变量
# lst = [1,2,3]
# print(lst, id(lst))
# lst += [4]
# print(lst, id(lst))
#
# lst1 = [1,2,3]
# print(lst1, id(lst1))
# lst1 = lst1 + [4]
# print(lst1, id(lst1))
# ##################################################什么是pep8
# pep8:python enhancement propsol python增强建议 第8版
# 每级缩进使用4字符
# 逗号、冒号紧贴前一个字符,后面需要加空格隔开
# 函数指定默认参数时,=号两边不要空格
# 避免使用:永远不要使用字母‘l’（小写的L），‘O’（大写的O），或者‘I’（大写的I）作为单字符变量名
# ##################################################找出重复的字符
# str1 = "abcbc"
# c = '0'
# for i in range(len(str1)):
#     for j in range(i+1,len(str1)):
#         if str1[i] == str1[j]:
#             c = str1[i]
#             break
#     if c != '0':
#         break
# print(c)
# #################################################简述深拷贝与浅拷贝
# 深拷贝:复制值到一个新变量,改变新变量不会影响到原来的变量
# 浅拷贝:复制引用到新便改良,修改新变量将会导致原变量跟着变动
# #################################################冒泡排序
# def bubbleSort(lst1):
#     n = len(lst1)
#     for i in range(n):
#         for j in range(0, n - i - 1):
#             if lst1[j] > lst1[j + 1]:
#                 lst1[j], lst1[j + 1] = lst1[j + 1], lst1[j]
# lst = [ 1, 4, 2, 7, 6, 5, 9, 0 ]
# bubbleSort(lst)
# print(lst)
# #################################################快速排序
# def Quicksort(list1,start,end):
#     if start >= end:
#         return
#     left = start
#     right = end
#     mid = list1[start]
#     while left < right:
#         while left < right and list1[right] >= mid:
#             right -= 1
#         list1[left] = list1[right]
#         while left < right and list1[left] < mid:
#             left += 1
#         list1[right] = list1[left]
#     list1[left] = mid
#     Quicksort(list1, start, left - 1)
#     Quicksort(list1, left + 1, end)
# list1 = [1,54,7,35,76,94,4,54]
# print(list1)
# Quicksort(list1, 0, len(list1)-1)
# print(list1)
# #################################################判断回文
# str1 = input("输入回文数:")
# str2 = str1[::-1]
# print(str1 == str2 and "是回文数" or "不是回文数")
# ##########################################################截取信息
import re
import requests
import json
def read_file(input_file_name,output_file_name): # 取IP函数：将输入文件中的IP地址输出到指定文件中
    _fLog = open(input_file_name)# 打开目标文件
    ip_list=[]
    for each in _fLog:
        ip=re.findall(r'(?<![\.\d])(?:\d{1,3}\.){3}\d{1,3}(?![\.\d])', str(each), re.S) # 正则查找ip地址
        ip_list.append(ip[0])
    ids = list(set(ip_list))  # 列表去重:通过set方法进行处理
    print("共解析ip个数:%s "% len(ids))
    # ##写出数据到本地
    # 设置输出文件路径
    out = open(output_file_name, "a")  # 打开要存放截取的IP的文件
    for each in ids:
        print(each)
        out.write(each + '\n')
    out.close()  # 关闭连接
    _fLog.close()
    print("ip提取完毕!")
def URL(url_ip):  # 函数功能：去除url后面的IP地址
    url_ip = url_ip[::-1]
    d4 = url_ip.index('=')
    url_ip = url_ip[::-1]
    url_ip = url_ip[0:len(url_ip) - d4]
    return url_ip
read_file("scwebsite2_ssl.log","outout.log")
f = open("outout.log")  # 打开ip地址文件
_fp = open("message.txt","a")  # 以追加写的形式打开文件，以便写入处理后的数据
for i in f:  # 遍历ip地址
        url = "http://ip.aliyun.com/outGetIpInfo?accessKey=alibaba-inc&ip=114.119.156.146"
        url = URL(url) + i  # 使用URL函数将url末尾的IP地址去除，将ip文件中的ip地址接到url后面
        print(url)
        try:
            response = requests.get(url)  # request获取url回复
            url_text = response.text
            dict_message = json.loads(url_text)  # 利用json模块将字典形式的字符串转化成字典放入dict_message中
            print(dict_message)
            ip = dict_message.get('data').get('queryIp')  # 获取字典中key为queryIp的值,即IP地址
            country = dict_message.get('data').get('country')  # 获取字典中key为country的值,即国家名称
            region = dict_message.get('data').get('region')  # 获取字典中key为region的值,即省份名称
            isp = dict_message.get('data').get('isp')  # 获取字典中key为isp的值,即服务商名称
            message = ip + ':' + country + ' ' + region + ' ' + isp + '\n'  # 将获取的值组合在一起
            print(message)
            _fp.write(message) # 将每一条信息追加到文件中
        except:
            print("请求错误的url:")
            print(url)
